home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / cprog.EXE / VIEW.H < prev    next >
C/C++ Source or Header  |  1995-10-02  |  10KB  |  295 lines

  1. /*
  2.   Undefine min and max, I'm going to substitute functions for them
  3.   since I only use integers.
  4. */
  5.  
  6. #ifdef min
  7. #undef min
  8. #endif
  9.  
  10. #ifdef max
  11. #undef max
  12. #endif
  13.  
  14. /*
  15.   The following defines turn off specific features of the view program
  16.   some of these features are interdependant so you may have to turn off
  17.   more than one or turn on more than one to get the effect you are looking
  18.   for.
  19. */
  20. #define VIEW_HAS_RAW         1                   /* Hex and Bin modes */
  21. #define VIEW_HAS_MEMORY      1                   /* Views memory as file */
  22. #define VIEW_HAS_DIR         1                   /* Shows dir listing */
  23. #define VIEW_HAS_SEARCH      1                   /* Search for text string */
  24. #define VIEW_HAS_GOTO        1                   /* Goto line/pos/address */
  25. #define VIEW_HAS_NEWFILE     1                   /* Select a new file while in view */
  26. #define VIEW_HAS_TILE        1                   /* Tile windows when window added or deleted */
  27.  
  28. #define TRUE  1
  29. #define FALSE 0
  30.  
  31. /*
  32.   These defines are for the keyboard scan codes, these are specific to the
  33.   IBM-PC and can be found in the IBM-PC Technical Reference Manual
  34. */
  35. #define CURSOR_DOWN         80
  36. #define CURSOR_LEFT         75
  37. #define CURSOR_RIGHT        77
  38. #define CURSOR_UP           72
  39.  
  40. #define CNTL_CURSOR_LEFT   115
  41. #define CNTL_CURSOR_RIGHT  116
  42. #define CNTL_PGUP          132
  43. #define CNTL_PGDN          118
  44. #define CNTL_HOME          119
  45. #define CNTL_END           117
  46.  
  47. #define PGDN                81
  48. #define PGUP                73
  49. #define HOME                71
  50. #define END                 79
  51.  
  52. #define SHIFT_TAB           15
  53. #define TAB                  9
  54. #define ESC                 27
  55. #define BACKSPACE            8
  56. #define RETURN              13
  57.  
  58. /*
  59.   These are the four ways that the viewstack can be refreshed on the
  60.   screen.
  61. */
  62.  
  63. #define REFRESH_ALL        0             /* Undo all windows, Redo all windows */
  64. #define REFRESH_TOP        1             /* Undo top window, Redo top window */
  65. #define REFRESH_CONTENTS   2             /* Redo contents of top window */
  66. #define REFRESH_OFF        3             /* Undo all windows */
  67. #define REFRESH_NEXT       4
  68. #define REFRESH_PREV       5
  69.  
  70. /*
  71.   These are the ways that the text can scroll vertically
  72. */
  73. #define SCROLL_NONE         0
  74. #define SCROLL_DOWN         1
  75. #define SCROLL_UP           2
  76. #define SCROLL_PAGE_UP      3
  77. #define SCROLL_PAGE_DOWN    4
  78. #define SCROLL_HOME         5
  79. #define SCROLL_END          6
  80. #define SCROLL_RESET        7
  81. #define SCROLL_CLEAR        8
  82.  
  83.  
  84. /*
  85.   These are defines for the limits of various parts of view
  86. */
  87. #define VIEW_MAX_LINE    264             /* Maximum logical "line" (bytes)*/
  88. #define VIEW_MAX_BINMODE 80              /* Maximum logical "line" in BINMODE (bytes)*/
  89. #define VIEW_MAX_HEXMODE 16              /* Maximum logical "line" in HEXMODE (bytes)*/
  90. #define VIEW_MAX_LONG    20              /* Maximum number of digits in ULONG as ascii */
  91. #define VIEW_BUF_SIZE    20480           /* Buffering factor */
  92. #define VIEW_LINE_VIEW   50              /* Number of lines to cache */
  93.  
  94. #define VIEW_EOF         (0xFFFF)        /* VIEWFILE end of file indicator */
  95.  
  96. #if VIEW_HAS_MEMORY
  97.  
  98. #define VIEW_MEM_NAME    "MEMORY"        /* Special file name to indicate memory instead of file */
  99.  
  100. #endif
  101.  
  102. #if VIEW_HAS_DIR
  103.  
  104. #define VIEW_DIR_WIDTH   (view_cols/2)+4            /* Width of directory window */
  105. #define VIEW_DIR_HEIGHT  (view_rows/2)+4            /* Height of directory window */
  106. #define VIEW_DIR_ROW     ((view_rows/2)-(VIEW_DIR_HEIGHT+2)/2) /* Top row of directory window */
  107. #define VIEW_DIR_COL     ((view_cols/2)-(VIEW_DIR_WIDTH+2)/2)  /* Left col of directory window */
  108.  
  109. #endif
  110.  
  111. /*
  112.   These are some types that are used in view
  113. */
  114.  
  115. typedef unsigned long ULONG;             /* an unsigned long just an alias */
  116. typedef unsigned char UCHAR;             /* an unsigned char type */
  117. typedef unsigned int  UINT;              /* an unsigned int type */
  118.  
  119.  
  120.                                          /* Struct to save screen regions in */
  121. typedef 
  122.   struct viewsave
  123.     {
  124.     int row,col,rows,cols;               /* Coordinates and dimensions of region */
  125.     UCHAR *buf;                          /* Data saved from that region */
  126.     } VIEWSAVE;
  127.  
  128.                                          /* Struct for file buffering and control */
  129. typedef
  130.    struct viewfile
  131.      {
  132.      UCHAR *fname;                       /* file name */
  133.      int   fh;                           /* file handle or VIEW_MEM_HDL */
  134.      ULONG pos;                          /* position of "memory" or file pointer */
  135.      ULONG end;                          /* end of the file */
  136.      int   idx;                          /* next character in buffer */
  137.      int   len;                          /* number of characters in buffer */
  138.      UINT  lmode;                        /* formatting mode for lines */
  139.      UCHAR buf[VIEW_BUF_SIZE];           /* buffer */
  140.      } VIEWFILE;
  141.  
  142. typedef                                  /* Struct for managing views on screen */
  143.   struct view
  144.     {
  145.     int         row,col,rows,cols;       /* Current position and dimensions of view */
  146.     int         coff;                    /* column offset into each line */
  147.     ULONG       pos[VIEW_LINE_VIEW];     /* position in viewfile of lines */
  148.     UCHAR       *lines[VIEW_LINE_VIEW];  /* lines currently in view */
  149.     VIEWFILE    *vf;                     /* file control struct for this view */
  150.     VIEWSAVE    *save;                   /* screen region covered by view */
  151.     struct view *next;                   /* next view in chain (circular) */
  152.     struct view *prev;                   /* prev view in chain (circular) */
  153.     } VIEW;
  154.  
  155. #if VIEW_HAS_DIR
  156.  
  157. typedef                                  /* Struct for directory list */
  158.   struct dirlist
  159.     {
  160.     UCHAR *line;                         /* text line for directory list */
  161.     struct dirlist *prev;                /* prev line (NULL terminated)  */
  162.     struct dirlist *next;                /* next line (NULL terminated)  */
  163.     } DIRLIST;
  164.  
  165. #endif
  166.  
  167. extern VIEW *viewstack;                  /* pointer to the bottom view on screen */
  168.  
  169. extern UCHAR _far *screen;               /* pointer to display ram */
  170.  
  171. #if VIEW_HAS_MEMORY
  172. #define VIEW_MEM_HDL -1
  173.                                          /* huge 0 pointer to memory */
  174. extern UCHAR _huge *memory;
  175. #endif
  176.                                          /* characters used in hex/dec conversion routines */
  177. extern UCHAR  hexdigits[];
  178.  
  179. extern int view_offset;                  /* current offset into display memory */
  180. extern int view_attr;                    /* current display attribute */
  181. extern int view_is_mono;                 /* flag indicates mono (TRUE) or color (FALSE) */
  182. extern int view_cols;
  183. extern int view_rows;
  184.  
  185. #define VIEW_TEXT_MODE  0                /* TRUE to treat display as \n termed text lines */
  186.  
  187. #if VIEW_HAS_RAW
  188.  
  189. #define VIEW_BIN_MODE   1                /* if TRUE display 80 column unformatted records with file offset on left */
  190. #define VIEW_HEX_MODE   2                /* if TRUE display 16 byte hex formatted display with file offset on left and ascii on right */
  191.  
  192. #endif
  193.  
  194. extern UCHAR *view_line;                 /* line input buffer */
  195.  
  196. #if VIEW_HAS_DIR
  197.  
  198. extern UCHAR *view_curdir;               /* current directory when view entered */
  199.  
  200. #endif
  201.  
  202. /*
  203.   Array of attributes for color and monochrome displays
  204. */
  205.  
  206. extern int view_attr_list[2][5];
  207.  
  208. #define ACTIVE_WINDOW     (view_attr_list[view_is_mono][0])
  209. #define INACTIVE_WINDOW   (view_attr_list[view_is_mono][1])
  210. #define ERROR_MESSAGE     (view_attr_list[view_is_mono][2])
  211. #define GET_STRING        (view_attr_list[view_is_mono][3])
  212. #define GET_STRING_CURSOR (view_attr_list[view_is_mono][4])
  213.  
  214.  
  215. /*
  216.    Function Prototypes
  217. */
  218. int max( int x, int y);
  219. int min ( int x, int y);
  220. int gcd( int a, int b );
  221.  
  222. VIEWSAVE *view_getsave( int row,int col,int rows,int cols );
  223. void view_putsave( VIEWSAVE *save );
  224. void view_restore( VIEW *trav );
  225. void view_frame( UCHAR *title,int row,int col,int rows,int cols );
  226.  
  227. void view_goto(int row,int col);
  228. void view_putc( int ochar );
  229. void view_fill(int fill, int count);
  230. void view_puts(UCHAR *str, int len);
  231. int  view_gets( int row,int col, int len, UCHAR *str);
  232. int view_prompt( UCHAR *title,UCHAR *prompt, UCHAR *retbuf, int retlen );
  233.  
  234. void _far view_errfunc();
  235. void view(void);
  236. void view_save( VIEW *trav );
  237. void view_refresh(int refresh_mode);
  238. void view_new( UCHAR *fname, int row,int col,int rows,int cols );
  239. void view_tile( void );
  240. void view_delete( void );
  241. void view_quit( void );
  242. void view_error( int isfatal, UCHAR *msg );
  243. void view_scroll( VIEW *current, int mode );
  244. UCHAR *view_strdup( UCHAR *str);
  245. int view_packbuf( UCHAR *buf, int size );
  246. void view_unpackbuf( UCHAR *buf, int row, int col, int rows, int cols );
  247.  
  248.  
  249. #if VIEW_HAS_NEWFILE
  250. int  view_newfile( void );
  251. #endif
  252.  
  253. #if VIEW_HAS_SEARCH
  254. int  view_search( void );
  255. #endif
  256.  
  257. int  view_getvidmode( void );
  258.  
  259. ULONG view_seek( VIEWFILE *vf, long pos, int base );
  260. ULONG view_tell( VIEWFILE *vf );
  261. UINT view_getl_bwd( VIEWFILE *vf, UCHAR *line, int max );
  262. UINT view_getl_fwd( VIEWFILE *vf, UCHAR *line, int max );
  263. UINT view_getc_fwd( VIEWFILE *vf );
  264. UINT view_getc_bwd( VIEWFILE *vf );
  265. int view_read_fwd( VIEWFILE *vf );
  266. int view_read_bwd( VIEWFILE *vf );
  267. VIEWFILE *view_open( UCHAR *fname );
  268. void view_close( VIEWFILE *vf );
  269.  
  270. #if VIEW_HAS_RAW
  271.  
  272. UINT view_getl_raw( VIEWFILE *vf, UCHAR *line, int dir );
  273. UCHAR *view_ultoa( ULONG num, int base, int wide, int fill );
  274.  
  275. #endif
  276.  
  277. #if VIEW_HAS_GOTO
  278.  
  279. ULONG view_atoul( UCHAR *num, int base );
  280. void view_goto_line( void );
  281.  
  282. #endif
  283.  
  284. #if VIEW_HAS_DIR
  285.  
  286. void view_dirdisp( DIRLIST *dir );
  287. int view_dir( UCHAR *name );
  288. DIRLIST *view_getlist ( void );
  289. DIRLIST *view_freelist( DIRLIST *dir );
  290. DIRLIST *view_addline(DIRLIST *dir, struct find_t *file);
  291. void view_fmtline(UCHAR *line, struct find_t *file);
  292.  
  293. #endif
  294.  
  295.